package org.facyt.vacas.dao.impl;

import java.math.BigDecimal;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.facyt.vacas.dao.ComponenteValorDAO;
import org.facyt.vacas.entities.vacas.Componente;
import org.facyt.vacas.entities.vacas.ComponenteValor;
import org.facyt.vacas.entities.vacas.MateriaPrima;
import org.springframework.transaction.annotation.Transactional;

public class ComponenteValorDAOImpl implements ComponenteValorDAO {
	
	private static final Log logger = LogFactory.getLog(ComponenteValorDAOImpl.class);
	
	@PersistenceContext
	private EntityManager entityManager;

	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	@Transactional
	public ComponenteValor nuevoComponenteValor(Componente c,
			BigDecimal cantidad,  MateriaPrima mp, long idComponente) throws Exception {
		ComponenteValor cv = new ComponenteValor();
		
		try {
			cv.setCantidad(new BigDecimal(cantidad.toString()));
			cv.setSeusa(false);
			cv.setMateriaprima(mp);
			if(c==null)
				c = entityManager.find(Componente.class,idComponente);
			
			cv.setComponente(c);			  
			this.entityManager.persist(cv);
			
		} catch (Exception e) {
			logger.error("",e);
		}
		return cv;
	}

	@Transactional
	public ComponenteValor updateCV(ComponenteValor cv, BigDecimal cantidad,MateriaPrima mp,long idComponente) throws Exception {
		ComponenteValor cv1 = null;
		try {
			cv1 = entityManager.find(ComponenteValor.class,cv.getId());
			if(cv1==null)
				cv1 = nuevoComponenteValor(cv.getComponente(), cantidad, mp, idComponente);
			else
				if(cv1.getCantidad().floatValue() != cantidad.floatValue())
				{
					cv1.setCantidad(new BigDecimal(cantidad.toString()));			
					this.entityManager.merge(cv1);		
				}
		} catch (Exception e) {			
			logger.error("", e);
		}
		
		entityManager.flush();
		return entityManager.find(ComponenteValor.class,cv.getId());
		
	}

}
